package com.泛型;
@SuppressWarnings("all")
public class 自定义泛型注意事项 {
    public static void main(String[] args) {
        /**注意细节：
         * 1.普通成员可以用泛型；
         * 2.使用泛型的数组不能初始化；     原因：E []arr = new E[8] 没有确定的类型，不知道开辟多大的空间，所以报错；
         * 3.静态方法和属性不能有泛型；     原因：静态成员跟类相关，静态成员比对象早加载，所以同样无法确定类型而报错；
         * 4.类（泛型类） 的 泛型类型 是在创建对象的时候就确定（因为创建对象时，就要指定类型）
         * 5.如果在创建对象时，没有指定类型，默认会Object;
         */
        A1<Integer, Boolean> a1 = new A1<>(100,  true, "hello");
    }
}


class A1<T,E>{
    //A1<Integer, Boolean> a1 = new A1<>(100,  true, "hello");

/**1. 1.普通成员可以用泛型；*/
    T t; //T = Integer
    E e; //E = Boolean
    String str;

/**2. 使用泛型的数组可以定义，但不能初始化 */
    E []arr;
//    E []arr = new E[8];类型形参 'E' 不能直接实例化


    public A1(T t, E e, String str) {  //使用泛型当参数类型
        this.t = t;
        this.e = e;
        this.str = str;
    }

    public E getE() {  //使用泛型当作返回值， E = Boolean
        return e;//return true
    }
}